perm filename FLIST.SAI[SYS,HE]1 blob sn#020396 filedate 1973-01-18 generic text, type T, neo UTF8
COMMENT ⊗   VALID 00002 PAGES 
RECORD PAGE   DESCRIPTION
 00001 00001
 00002 00002	BEGIN "FLIST"
 00005 ENDMK
⊗;
BEGIN "FLIST"

REQUIRE 5000 STRING_SPACE;
STRING COM, FILE, PAGE, FP, LP, T, LIN;
DEFINE CR="'15", LF="'12", FF="'14", DSK="1", LPT="2";
INTEGER BRK, EOF, FLG, FL, LL, L, COUNT, LOC;
LABEL LOOP, NXTSET;

SIMPLE PROCEDURE GET;
	BEGIN
	PAGE ← INPUT(DSK,4);
	IF LOC THEN
		BEGIN
		T ← PAGE;
		LIN ← SCAN(T,3,BRK);
		END ELSE LIN←PAGE;
	L ← LENGTH(LIN);
	COUNT ← COUNT+1;
	IF LIN[∞ FOR 1]=LF THEN L←L-2;
	IF ¬(COUNT MOD 5) THEN OUTSTR("  "&CVS(COUNT));
	END;

SIMPLE BOOLEAN PROCEDURE TEST(STRING PN; INTEGER PL);
	RETURN(PL>0∧L≥PL∧EQU(PN,LIN[L+1-PL FOR PL]));

COUNT ← 0;
SETBREAK(1," ",NULL,"I");
SETBREAK(2," →",NULL,"I");
SETBREAK(3,LF,CR,"I");
SETBREAK(4,FF,NULL,"I");

LOOP:	OUTSTR(CR&LF&"*");
	COM ← INCHWL;
	DO FILE←SCAN(COM,1,BRK) UNTIL LENGTH(FILE)∨¬LENGTH(COM);
	IF ¬LENGTH(FILE) THEN GO TO LOOP;
	OPEN(DSK,"DSK",0,6,0,10000,BRK,EOF←FALSE);
	LOOKUP(DSK,FILE,FLG);
	IF FLG THEN
		BEGIN
		OUTSTR(FILE&" NOT FOUND");
		GO TO LOOP;
		END;
	OPEN(LPT,"LPT",0,0,6,0,BRK,EOF←FALSE);
	ENTER(LPT,"FLIST.LST",FLG);
	DO	BEGIN
		OUTSTR("FIRST OR LAST LINE (L OR F)?");
		LOC ← INCHWL;
		END UNTIL LOC="F"∨LOC="L";
	LOC ← LOC="F";
NXTSET:	DO FP←SCAN(COM,2,BRK) UNTIL LENGTH(FP)∨BRK="→"∨¬BRK;
	FL ← LENGTH(FP);
	IF BRK="→" THEN
		BEGIN
		DO LP←SCAN(COM,1,BRK) UNTIL LENGTH(LP)∨¬BRK;
		LL ← LENGTH(LP);
		END ELSE LL ← -1;
	GET;
	IF FL THEN WHILE ¬(EOF∨TEST(FP,FL)) DO GET;
	DO	BEGIN
		OUT(LPT,PAGE&FF);
		IF EOF∨LL=-1 THEN DONE;
		GET;
		END UNTIL TEST(LP,LL);
	IF ¬EOF∧LENGTH(COM) THEN GO TO NXTSET;
	RELEASE(LPT);
	RELEASE(DSK);
	GO TO LOOP;
END "FLIST";